package br.org.espmessenger.cliente.telas;

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.Timer;

import br.org.espmessenger.cliente.Fachada;
import br.org.espmessenger.middleware.InfraEstruturaException;
import br.org.espmessenger.modelo.Usuario;
import br.org.espmessenger.modelo.excecoes.LogonInvalidoException;
import br.org.espmessenger.modelo.excecoes.UsuarioInexistenteException;

public class TelaPrincipalListener implements ActionListener {
	// Lista de comandos
	public static final int SAIR               = 0;
	public static final int CONEXAO            = 1;
	public static final int MUDAR_EXIBICAO     = 2;
	public static final int ORGANIZAR_CONTATOS = 3;
	
	private Fachada fachada;
	private TelaPrincipal tela;
	private Timer animacao; 
	
	public TelaPrincipalListener(TelaPrincipal tela) throws InfraEstruturaException {
		this.tela = tela;
		fachada = Fachada.getInstance();
	}
	
	public void actionPerformed(ActionEvent e) {
		int opcao = Integer.parseInt(e.getActionCommand());
		switch (opcao) {
			case SAIR:
				break;
			case CONEXAO:
				animarStatus();
				conectar(e);
				pausarAnimacao();
				break;
			case MUDAR_EXIBICAO:
				break;
			case ORGANIZAR_CONTATOS:
				break;
		}
	}

	private void pausarAnimacao() {
		animacao.stop();
		tela.getLblStatus().setIcon(new ImageIcon(getClass().getResource(
		"/br/org/espmessenger/cliente/icones/busyicons/idle-icon.png")));
	}

	private void animarStatus() {
		animacao = new Timer(50, new ActionListener() {
			private int indice;
			public void actionPerformed(ActionEvent e) {
				tela.getLblStatus().setIcon(new ImageIcon(getClass().getResource(
					String.format("/br/org/espmessenger/cliente/icones/busyicons/busy-icon%d.png", indice++))));
				if (indice > 14) indice = 0;
			}
		});
		animacao.start();
	}

	private void conectar(ActionEvent e) {
		tela.getBtnConexao().setEnabled(false);
		tela.getMenuConexao().setEnabled(false);

		// Se não houver nenhum usuário conectado => conectar
		if (fachada.getUsuario() == null) {
			Usuario u = new Usuario();
			u.setEmail(tela.getTxtEmail().getText());
			u.setSenha(new String(tela.getTxtSenha().getPassword()));
			try {
				fachada.conectarUsuario(u);
				((CardLayout)tela.getPainelConteudo().getLayout()).last(tela.getPainelConteudo());
			} catch (LogonInvalidoException e1) {
				JOptionPane.showMessageDialog(tela, e1.getMessage(),
						"Falha de Logon", JOptionPane.ERROR_MESSAGE,
						new javax.swing.ImageIcon(getClass()
								.getResource("/br/org/espmessenger/cliente/icones/grandes/usuario_desconectado.png")));
			} catch (InfraEstruturaException e1) {
				JOptionPane.showMessageDialog(tela, e1.getMessage(),
						"Falha", JOptionPane.ERROR_MESSAGE);
			}
		// Se houver desconectar
		} else {
//			fachada.desconectarUsuario();
		}
		
		tela.getBtnConexao().setEnabled(true);
		tela.getMenuConexao().setEnabled(true);
	}

}
